package codigos;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

public class Corregir_practicas {
    
    public String compilacion(String ruta) throws IOException, InterruptedException{
        //creamos un string con el nombre del ejecutable, simplemente quitando la extension.
        String ejecutable = ruta.replace(".c", "");
        try{
            //creamos el proceso para compilar la aplicación
            Process p1 = Runtime.getRuntime().exec("gcc " +ruta+ " -o "+ ejecutable);
            //esperamos a que el proceso finalice
            p1.waitFor();   
            System.out.println(ejecutable);
        }
        catch(Exception e){
            System.out.println(e.getMessage());
        }
        return ejecutable;
    }
    
    private List listaConSeparadores(String linea, String separador){
        List<String> lista = new ArrayList<>();
        String valor;
        
        //Creamos un StringTokenizer con cada linea e indicando el separador
        StringTokenizer st = new StringTokenizer(linea,separador);
        
        //Recorremos cada linea separando cada valor y añadiendolos a una lista.
        while (st.hasMoreTokens()){
            valor = st.nextToken();
            lista.add(valor);
        }
    
        return lista;
    }
    
    private List listaCasos(String ruta) throws FileNotFoundException, IOException{
        List<String> lista = new ArrayList<>();
        String linea;
        
        File fil = new File(ruta);
        try (FileReader fr = new FileReader(fil)) {
            //Leemos el fichero linea a linea
            BufferedReader br = new BufferedReader(fr);
            
            //Asignamos cada linea a una posiciond e una lista
            while((linea = br.readLine()) != null){
                lista.add((String)linea);
            }
        }
        return lista;        
    }
    
    private String scriptMultiplesSalidas(String ruta, List casos) throws InterruptedException,IOException 
    {
        String s1 = "";
        
        List<String> command = new ArrayList<>();
        //Ejecutamos la compilacion de la practica
        command.add(compilacion(ruta));
        
        ProcessBuilder builder = new ProcessBuilder(command);
        Map<String, String> environ = builder.environment();
        
        Process process = builder.start();
        OutputStream os = process.getOutputStream();
        
        for(int j = 0; j<casos.size();j++){
            String caso = (String) casos.get(j);
            caso += "\n";
            os.write(caso.getBytes());
            os.flush();
        }
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null) {
            //System.out.println(line);
            s1 += line;
        }
        
        return s1;
    }
    
    public void corregir(String ruta, String nombre) throws IOException, InterruptedException{
        /*"./../../../../../NetBeansProjects/Corrector_URJC/web/practicas/"
                + asignatura.getAsignatura() + "/" + pr.getNombre() + "/alumnos/" + 
                usr.getIdperfilfk().getNombre() + " " + usr.getIdperfilfk().getApellido1() + 
                " " + usr.getIdperfilfk().getApellido2() + "/";*/
        String rutaAux = ruta+"../../";
        //String ejecutable = ruta.replace("/alumnos/", "");
        String rutaCompilada = this.compilacion("\""+ruta+nombre+"\"");
    }
            
}
